@file:JvmName("AppExt")

package com.sun.module_common.event

import android.content.Context
import android.content.pm.PackageManager
import androidx.core.content.ContextCompat
import com.sun.module_base.app.BaseApp
import com.sun.module_base.app.BaseViewModel

/**
 * 检查单个权限是否已授权
 *@author:sunc
 *@time :2025/7/21 11:05
 *@desc: 描述
 * @param permission 需要检查的权限字符串
 * @return 返回Boolean值，true表示权限已授权，false表示权限未授权
 */
fun Context.checkSinglePermission(permission: String) : Boolean {  // 定义一个扩展函数，用于检查单个权限状态
    return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED  // 检查权限状态并与已授权状态比较，返回结果
}

/**
 * 获取EventViewModel实例的函数
 * 通过BaseApp获取ApplicationContext，然后从中获取ViewModelProvider
 * 最后返回EventViewModel的实例
 *
 * @return EventViewModel的实例
 */
fun getEventViewModel(): EventViewModel {
    BaseApp.getApplicationContext().let { // 使用let扩展函数，获取ApplicationContext并执行代码块
        return it.getAppViewModelProvider()[EventViewModel::class.java] // 从ViewModelProvider中获取EventViewModel实例
    }
}

/**
 * 获取AppViewModel实例的函数
 * 通过ApplicationContext获取ViewModelProvider并返回AppViewModel实例
 *
 * @return AppViewModel实例
 */
fun getAppViewModel(): AppViewModel {
    // 使用BaseApp获取ApplicationContext
    BaseApp.getApplicationContext().let {
        // 通过ApplicationContext获取ViewModelProvider并返回AppViewModel的实例
        return it.getAppViewModelProvider()[AppViewModel::class.java]
    }
}

/**
 * 获取指定类型的ViewModel实例
 *
 * @param T ViewModel的类型
 * @return ViewModel实例，如果获取失败则返回null
 */
inline fun <reified T : BaseViewModel> getAppViewModel(): T? {
    return try {
        BaseApp.getApplicationContext().let { context ->
            context.getAppViewModelProvider()[T::class.java]
        }
    } catch (e: Exception) {
        null
    }
}